package org.example;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

@Configuration
@ComponentScan("org.example") // 扫描com.example包下的所有组件
@EnableAsync // 启用异步执行
public class AppConfig {

    /**
     * 配置线程池
     * 核心线程数: 2
     * 最大线程数: 5
     * 队列容量: 10
     * 空闲线程存活时间: 60秒
     */
    @Bean(name = "threadPoolExecutor")
    public ThreadPoolExecutor threadPoolExecutor() {
        return new ThreadPoolExecutor(
                2, // 核心线程数
                5, // 最大线程数
                60, // 空闲线程存活时间
                TimeUnit.SECONDS, // 时间单位
                new ArrayBlockingQueue<>(10), // 工作队列
                new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略
        );
    }
}